home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Programming Languages Suite
/
ProgramD2.iso
/
Borland
/
Borland Pascal with Objects 7.0
/
WHEREIS.ZIP
/
IFINDREP.ASM
< prev
next >
Wrap
Assembly Source File
|
1992-10-27
|
3KB
|
74 lines
; FILENAME: IFINDREP.ASM
;
; Copyright (c) 1988, 1992 by Borland International, Inc.
;
; DESCRIPTION: This module implements the routine FindAndReplace. The
; routine will search through an array of bytes replacing all instances
; of a particular value with an alternative value. This module uses
; ideal mode syntax.
;
; ASSEMBLY INSTRUCTIONS: To assemble this module use the following TASM
; command line:
;
; TASM /dMDL=memorymodel Ifindrep
;
; 'memorymodel' in the above command line may be replaced by TINY, SMALL,
; MEDIUM, COMPACT, LARGE or HUGE.
%tabsize 4
ifndef MDL
display "Error: This module requires that you provide a memory model"
display " definition on the command line. I.E. /dMDL=SMALL."
err ; Force a fatal error
else
ideal ; Use TASM's Ideal mode
% model MDL ; Define the memory model
codeseg
global FindAndReplace:proc ; Declare public proc
proc FindAndReplace
; This routine searches through an array of byte values looking for
; the value indicated in al. Whenever it finds a match it replaces the
; byte with the value stored in ah. Note that this routine assumes that
; the pointer passed to it is normalized if the array being searched
; is longer than 0FFF0h bytes.
;
; Input
; ArrayPtr - far pointer to array
; al - unsigned byte value to search for
; ah - unsigned byte value to replace with
; cx - maximum number of bytes to search.
; Output
; none
; Calling convention
; Pascal
; Registers modified
; cx, di, es, Flags
arg ArrayPtr:dword=PARM_SIZE ; Define parameter passed on stack
push bp ; Set up the stack to access parameters
mov bp, sp
les di, [ArrayPtr] ; Get the address of the array
cld ; Search from low address to high address
ReplaceLoop:
repne scasb ; Find a matching byte
jcxz Exit ; At end of array
mov [byte es:di], ah ; Replace byte
jmp ReplaceLoop ; Replace next byte
Exit:
pop bp ; Restore stack pointer
ret PARM_SIZE ; Clean up stack since we're using Pascal
; calling conventions
endp FindAndReplace
endif ; ifndef MDL
end